import re

'''
match:从头开始匹配，第一个不成功则返回None
search:在整个字符内寻找
'''

def test1():
    msg='小明小红'
    pattern=re.compile('小红')
    print(pattern.match(msg)) #None

    pattern=re.compile('小明')
    print(pattern.match(msg)) #<re.Match object; span=(0, 2), match='小明'>


def test2():
    result=re.match('小明','小明小红')
    print(result)#<re.Match object; span=(0, 2), match='小明'>
test2()

def test3():
    result=re.search('小红','小明小红')
    print(result) #<re.Match object; span=(2, 4), match='小红'>
    print(result.span()) #(2, 4) 返回位置
    print(result.group()) #小红
test3()

def test4():
    # 用户名可以数字或字母，不能时数字开头，用户名长度必须是6位以上
    username='admin123'
    result=re.match('[a-zA-Z][a-zA-Z0-9]{5,}$',username)
    print(result)
test4()


def test5():
    '''
        .->r'\.'
        '\b'边缘


    '''
    # 找到所有py文件
    msg='aa.py bb.py cc.py dd.apyd'
    result=re.findall(r'\w+\.py\b',msg)
    print(result)

test5()

'''
    .   任意字符除\n
    ^   开头
    $   结尾
    \s  空白
    \b  边缘
    \d  数字
    \w  字母数字下划线
    大写为反面
    量词
    *   0，1，多个
    +   1，多个
    ?   0，1
    {min,max}
    {m}
    
'''

def test6():
    # 匹配0-100的整数
    num='100'

    result=re.match(r'[1-9]?\d?$|100$',num)
    print(result)
test6()

def test7():
    # 字母数字字母
    msg='a7sfsfw3s88e3serw'
    result=re.findall(r'[a-zA-Z]\d+[a-zA-Z]',msg)
    print(result) #['a7s', 'w3s', 'e3s']
test7()




def test8():
    '''
        起名
        (?P<名字>正则)  (?P=名字)

    '''
    msg='<html><h1>aaa</h1></html>'
    result=re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>',msg)
    print(result)
    print(result.group(1))
test8()

def test9():
    result=re.sub(r'\d+','90','java 99,python 100')
    print(result) #java 90,python 90
test9()

def fun(tem):
    num=int(tem.group())
    num=num+1
    return str(num)

def test10():
    result = re.sub(r'\d+',fun, 'java 99,python 100')
    print(result)
test10()

def test11():
    result=re.split(r'[,\s]','java 99,python 100')
    print(result)
test11()

def test12():
    # 不是以4，7结尾的手机号
    result=re.match(r'1\d{9}[0-35689]','15127621636')
    print(result)
test12()

def test13():
    '''
        分组，每个()为一组
        result.group(i)为第i组
    '''
    # 3-4位区号 8位机号
    result=re.match(r'(\d{3}|\d{4})-(\d{8})','101-12345678')
    print(result.group()) #101-12345678
    print(result.group(1)) #101
    print(result.group(2)) #12345678
test13()

def test14():
    msg='<html><h1>aaa</h1></html>'
    result=re.match(r'<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</\2></\1>$',msg)
    print(result)
    print(result.group(1)) #html
    print(result.group(2)) #h1
    print(result.group(3)) #aaa
test14()


